// handlers 模块的根模块文件
// 这个文件包含了所有处理请求的子模块的声明和公共结构体定义
// 声明 join 模块
pub mod join;
// 声明 uplink 模块
pub mod uplink;
// 声明 downlink 模块
pub mod downlink;
// 声明 join_accept 模块
pub mod join_accept;
// 设备参数结构体
// 这个结构体用于保存设备的相关参数和密钥信息
pub struct DeviceParams {
    pub dev_eui: String,   // 设备唯一标识符
    pub app_eui: String,   // 应用唯一标识符
    pub app_key: String,   // 应用密钥
    pub dev_nonce: String, // 设备随机数
    pub dev_addr: String,  // 设备地址
    pub nwk_skey: String,  // 网络会话密钥
    pub app_skey: String,  // 应用会话密钥
    pub join_nonce: String, // Join 随机数
}

/**
 * 将 LoRaWanPacket 转换为 DeviceParams。
 * 
 * 根据 MHDR 字段的值，解析 payload 并构造 DeviceParams 结构体。
 * 目前仅支持 Join Request 类型的数据包。
 * 
 * @param packet LoRaWanPacket 数据包。
 * @param app_key 应用密钥。
 * @return 构造的 DeviceParams 结构体，或者错误信息。
 */

// DeviceParams 结构体的实现
// 提供一个构造函数用于创建新的 DeviceParams 实例
impl DeviceParams {
    // 创建新的 DeviceParams 实例
    pub fn new(dev_eui: String, app_eui: String, dev_nonce: String) -> Self {
        DeviceParams {
            dev_eui,
            app_eui,
            app_key: "00112233445566778899AABBCCDDEEFF".to_string(), // 假设的默认应用密钥
            dev_nonce, // 使用传入的设备随机数
            dev_addr: "default".to_string(), // 假设的默认设备地址
            nwk_skey: "default".to_string(), // 假设的默认网络会话密钥
            app_skey: "default".to_string(), // 假设的默认应用会话密钥
            join_nonce: "default".to_string(),
        }
    }
}
